package com.flmz.judge.callback;

import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.model.Statistics;
import lombok.Getter;
import lombok.Setter;

import java.io.Closeable;
import java.io.IOException;

@Getter
@Setter
public class StatisticsCallback implements ResultCallback<Statistics> {

	private Long maxMemory = 0L;

	// 在开始接收统计信息时会被调用
	@Override
	public void onStart(Closeable closeable) {

	}

	// 在每次接收到新的统计信息时被调用
	@Override
	public void onNext(Statistics statistics) {
		// 它从 Statistics 对象中提取当前的最大内存使用量，并与现有的 maxMemory 值比较，保留较大的那个值，这样可以跟踪整个监控期间的最大内存使用情况
		Long usage = statistics.getMemoryStats().getMaxUsage(); // 程序运行到某个时间点上的内存使用的最大值
		if (usage != null) {
			maxMemory = Math.max(usage, maxMemory);
		}
	}

	// 获取统计信息过程中遇到错误时会被调用
	@Override
	public void onError(Throwable throwable) {

	}

	// 在所有的统计信息都被接收完毕后调用
	@Override
	public void onComplete() {

	}

	// 清理资源
	@Override
	public void close() throws IOException {

	}
}
